//
//! Copyright 2020 Alibaba Group Holding Limited.
//! 
//! Licensed under the Apache License, Version 2.0 (the "License");
//! you may not use this file except in compliance with the License.
//! You may obtain a copy of the License at
//! 
//!     http://www.apache.org/licenses/LICENSE-2.0
//! 
//! Unless required by applicable law or agreed to in writing, software
//! distributed under the License is distributed on an "AS IS" BASIS,
//! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//! See the License for the specific language governing permissions and
//! limitations under the License.

use dataflow::message::RawMessage;
use dataflow::builder::MessageCollector;

pub struct MessageLocalCollector<'a> {
    data: &'a mut Vec<RawMessage>,
}

impl<'a> MessageLocalCollector<'a> {
    pub fn new(data: &'a mut Vec<RawMessage>) -> MessageLocalCollector {
        MessageLocalCollector {
            data,
        }
    }
}

impl<'a> MessageCollector for MessageLocalCollector<'a> {
    fn collect_message(&mut self, message: RawMessage) {
        self.data.push(message);
    }

    fn collect_iterator(&mut self, message_list: Box<Iterator<Item=RawMessage> + Send>) {
        for message in message_list {
            self.collect_message(message);
        }
    }
}
